package com.emo.cloudEdge.service;

import com.emo.cloudEdge.mapper.UserMapper;
import com.emo.cloudEdge.pojo.Return;
import com.emo.cloudEdge.pojo.User;
import com.emo.cloudEdge.util.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class UserService {
    @Autowired
    private UserMapper userMapper;

    @Autowired
    private Gson gson;

    /**
     * 查询全部用户
     * @return
     */
    public String selectALl(){
        Return res=new Return();
        try {
            res.setData(userMapper.selectAll());
            res.setCode(200);
            res.setMessage("获取全部用户信息成功");
        }catch (Exception e){
            res.setCode(500);
            res.setMessage("获取全部用户信息失败");
        }
        return gson.toJson(res);
    }

    /**
     * 根据用户名-查找数据
     * @param account
     * @param password
     * @return
     */
    public String selectByAccount(String account,String password){
        Return res=new Return();
        try {
            User user=userMapper.selectByAccount(account);
            if(password.equals(user.getPassword())){
                //登录成功
                res.setData(user);
                res.setCode(200);
                res.setMessage("登录成功");
            }else{
                //登录失败
                res.setCode(500);
                res.setMessage("用户名或密码不正确");
            }
        }catch (Exception e){
            res.setCode(500);
            res.setMessage("用户名或密码不正确");
        }
        return gson.toJson(res);
    }

    /**
     * 根据用户角色返回角色列表
     * @param role
     * @return
     */
    public String selectUserListByRole(String account,int role){
        Return res=new Return();
        try{
            switch (role){
                case 1:
                    /**
                     * 供应商 => 只显示个人信息
                     */
                    res.setData(userMapper.selectByAccount(account));
                    break;
                case 2:
                    /**
                     * 仓库管理员 - 只显示管库全部的仓库管理人员
                     */
                    res.setData(userMapper.selectByRole(new int[]{2}));
                    break;
                case 3:
                    /**
                     * 财务管理员 - 只显示财务管理人员、供应商人员
                     */
                    res.setData(userMapper.selectByRole(new int[]{1,3}));
                    break;
                case 4:
                    /**
                     * 采购职员 - 显示个人信息、供应商人员
                     */
                    List<User> users=userMapper.selectByRole(new int[]{1});
                    users.add(userMapper.selectByAccount(account));
                    res.setData(users);
                    break;
                case 5:
                    /**
                     * 销售职员 - 只显示个人信息
                     */
                    res.setData(userMapper.selectByAccount(account));
                    break;
                case 6:
                    /**
                     * 采购经理 - 显示采购职员、采购经理、供应商人员列表
                     */
                    res.setData(userMapper.selectByRole(new int[]{4,6,1}));
                    break;
                case 9:
                    /**
                     * 超级管理员 - 显示全部人员信息
                     */
                    res.setData(userMapper.selectAll());
                    break;
            }
            res.setCode(200);
            res.setMessage("用户列表信息获取成功");
        }catch (Exception e){
            res.setCode(500);
            res.setMessage("用户名或密码不正确");
        }
        return gson.toJson(res);
    }
}
